

////2025-06-10---
 ////发电机控制器物模型-v1.0

//#include  "iotv30_config.h"


#include "cjson_api_readAttr.h"
#include "iot_node_func.h"
#include "iotv30_config.h"
#include "test_mode.h"
// #include "iot_node.h"

#include "uart_printf.h"
#include <string.h>

#include "dev_generator.h"



////注意：改变 数组 generator_iot_id_table[generator_index_end]的定义-----需要同步更新  枚举变量的定义 generator_attr_index_e-------
const  uint16_t  generator_iot_id_table[generator_index_end]=  
{
    //iot_id(hex)	,	name	R/W	变化上报	分类	数据类型	范围	单位	默认值		
    //	运行参数					

     0x1388	,//	5000	genVolt	发电机输出电压	RO	否	运行参数	uint32_t		0.1V
     0x1389	,//	5001	genCurr	发电机输出电流	RO	否	运行参数	uint32_t		0.1A
     0x138A	,//	5002	genPwr	发电机输出功率	RO	否	运行参数	uint32_t		W
     0x138B	,//	5003	genSpeed	转速	RO	否	运行参数	uint32_t		RPM
     0x138C	,//	5004	genTorque	扭矩	RO	否	运行参数	uint32_t		Nm
     0x138D	,//	5005	runTime	运行时长	RO	否	运行参数	uint32_t		second
     0x138E	,//	5006	fuelUsed	燃油油耗	RO	否	运行参数	uint32_t		L
     0x139C	,//	5020	oilTempe	机油温度	RO	否	运行参数	uint33_t		degreeC
     0x138F	,//	5007	oilLevel	机油油位	RO	否	运行参数	uint32_t	0~100	%
				
     0x1391	,//	5009	alarm	告警	RO	否	运行参数	uint32_t		
    0x1392	,//	5010	engiOpState	引擎操作状态	RO	否	运行参数	uint16_t		
    0x1393	,//	5011	systemStatus	系统状态	RO	否	运行参数	uint16_t		


     //配置参数----R/W-----可读写-------
     0x1390	,//	5008	thOilLevelLow	机油油位低阈值	R/W	否	配置参数	uint32_t	0~100	%
     0x139D	,//	5021	thOilTLow	机油温度低阈值	R/W	否	配置参数	uint32_t		degreeC
     0x139E	,//	5022	thOilTHi	机油温度高阈值	R/W	否	配置参数	uint32_t		degreeC

 //配置参数----WO------只写不可读-------
     0x1394	,//	5012	setMode	设置模式	WO	否	运行参数	uint16_t	0-4	
     0x1395	,//	5013	manualStart	手动模式启停	WO	否	运行参数	uint16_t	0-1	
     0x1396	,//	5014	autoStartCfg	自启动设置	WO	否	运行参数	uint16_t	0-1	
     0x1397	,//	5015	almMute	告警静音	WO	否	运行参数	uint16_t	1	
     0x1398	,//	5016	almReset	告警复位	WO	否	运行参数	uint16_t	1	
     0x1399	,//	5017	genSwOn	发电机合闸	WO	否	运行参数	uint16_t	1	
     0x139A	,//	5018	mainsSwOn	市电合闸	WO	否	运行参数	uint16_t	1	
						

  /*---------------------------------------------------*/   

  /*---------------------------------------------------*/   

    //产品信息						
    0x0801	,//	软件版本	RO	否	软件版本	string	最大32字节	
    0x0802	,//	硬件版本	RO	否	硬件版本	string	最大32字节	
    0x0803	,//	产品型号	RO	否	产品型号	string	最大32字节	
    0x0804	,//	生产信息	RO	否	生产信息	string	最大32字节	
    0x0805	,//	厂家信息	RO	否		string	最大32字节	

};


    ////--------只读的命令----------------------------------
//   {0x1388 ,	"genVolt	"} ,//	发电机输出电压	RO	1388	5000
//   {0x1389 ,	"genCurr	"} ,//	发电机输出电流	RO	1389	5001
//   {0x138A ,	"genPwr	"} ,//	发电机输出功率	RO	138A	5002
//   {0x138B ,	"genSpeed	"} ,//	转速	RO	138B	5003
//   {0x138C ,	"genTorque	"} ,//	扭矩	RO	138C	5004
//   {0x138D ,	"runTime	"} ,//	运行时长	RO	138D	5005
//   {0x138E ,	"fuelUsed	"} ,//	燃油油耗	RO	138E	5006
//   {0x138F ,	"oilLevel	"} ,//	机油油位	RO	138F	5007
//   {0x1390 ,	"thOilLevelLow	"} ,//	机油油位低阈值	RO	1390	5008
//   {0x1391 ,	"alarm	"} ,//	告警	RO	1391	5009




/////--------R/W属性的数据键值-名称对-----------------------------
const dev_attr_key_name_t  generator_iot_id_key_name_table[generator_iot_id_key_name_table_end]=
{

    ////--------只读的命令----------------------------------
//   { 0x1388 , " genVolt	"},//	1388	5000	发电机输出电压	uint32_t	RO	否	运行参数
//   { 0x1389 , " genCurr	"},//	1389	5001	发电机输出电流	uint32_t	RO	否	运行参数
//   { 0x138A , " genPwr	"},//	138A	5002	发电机输出功率	uint32_t	RO	否	运行参数
//   { 0x138B , " genSpeed	"},//	138B	5003	转速	uint32_t	RO	否	运行参数
//   { 0x138C , " genTorque	"},//	138C	5004	扭矩	uint32_t	RO	否	运行参数
//   { 0x138D , " runTime	"},//	138D	5005	运行时长	uint32_t	RO	否	运行参数
//   { 0x138E , " fuelUsed	"},//	138E	5006	燃油油耗	uint32_t	RO	否	运行参数
//   { 0x139C , " oilTempe	"},//	139C	5020	机油温度	uint32_t	RO	否	运行参数
//   { 0x138F , " oilLevel	"},//	138F	5007	机油油位	uint32_t	RO	否	运行参数					

//   { 0x1391 , " alarm	"},//	1391	5009	告警	uint32_t	RO	否	运行参数
//   { 0x1392 , " engiOpState	"},//	1392	5010	引擎操作状态	uint16_t	RO	否	运行参数
//   { 0x1393 , " systemStatus	"},//	1393	5011	系统状态	uint16_t	RO	否	运行参数


    ////--------能同时多个写的命令----------------------------------
  { 0x1390 , " thOilLevelLow	"},//	1390	5008	机油油位低阈值	uint32_t	R/W	否	配置参数
  { 0x139D , " thOilTLow	"},//	139D	5021	机油温度低阈值	uint32_t	R/W	否	配置参数
  { 0x139E , " thOilTHi	"},//	139E	5022	机油温度高阈值	uint32_t	R/W	否	配置参数

   ////--------只能单个写的命令----------------------------------
  { 0x1394 , " setMode	"},//	1394	5012	设置模式	uint16_t	WO	否	运行参数
  { 0x1395 , " manualStart	"},//	1395	5013	手动模式启停	uint16_t	WO	否	运行参数
  { 0x1396 , " autoStartCfg	"},//	1396	5014	自启动设置	uint16_t	WO	否	运行参数
  { 0x1397 , " almMute	"},//	1397	5015	告警静音	uint16_t	WO	否	运行参数
  { 0x1398 , " almReset	"},//	1398	5016	告警复位	uint16_t	WO	否	运行参数
  { 0x1399 , " genSwOn	"},//	1399	5017	发电机合闸	uint16_t	WO	否	运行参数
  { 0x139A , " mainsSwOn	"},//	139A	5018	市电合闸	uint16_t	WO	否	运行参数

};





 static generator_attr_t generator_obj[BATTERY_NODE_NUM_MAX];   /////下标与 配置节点数据结构一一对应 iot_NodeConfigObj_u   iot_NodeConfigObj;

#if 1
static  generator_attr_t generator_attr_default={


/////------测试数据-------------------------
 //   .data.level_mm = 50728, //0.01mm



/////------56H	版本号‘V’--------------
    .info.soft_ver="sV2.0",
    .info.hard_ver="hV2.0",// 

    .info.product_model="JTY-GD-ZS209",       //
    .info.production_info="rs485",    // 485型
    .info.manufacturer="PRSS",        //4Bh==公司识别码’K’--普锐森社光电感烟火灾探测报警器（ZS209）


    .config={//default value, do not delete

       .addr    = 1,
       .channel = dev_chan_485_2,

    },


};


#endif



/**
 * @brief 
 * 
 */
void generator_param_init(void)
{
 #if 0   
    snprintf(generator_attr.info.soft_ver, sizeof(generator_attr.info.soft_ver),"%s sv%04X %s",SDK_VER_STR,app_get_ver(),__DATE__);
    snprintf(generator_attr.info.hard_ver, sizeof(generator_attr.info.hard_ver),"%s",HARDWARE_STR);
    snprintf(generator_attr.info.production_info, sizeof(generator_attr.info.production_info),"%s","2024-08-p01");
#endif

}


#if 1
//还需要检测配置参数是否合理----设备地址，通道编号---量程
uint8_t generator_add_obj(uint8_t idx,uint8_t channel,uint8_t addr)
{

//还需要检测配置参数是否合理----设备地址，通道编号---量程
//  generator_max_scale_0_01mm   (100000U)    //1000mm===1000x100 (0.01mm)

    LOG_NAME();

   if( (addr>generator_max_dev_addr) || (channel>generator_max_channel) )
   {
        return 0;
   }



    generator_attr_default.config.addr    = addr;
    generator_attr_default.config.channel = channel;

    generator_set_obj( idx, (generator_attr_t*)&generator_attr_default ) ; 

 return 1;

}

#endif


/**
 * @brief 根据下标，获取iot_id 的编号
 * 
 * @param idx 
 */
uint16_t  generator_get_iot_id(uint8_t idx)
{
    return  generator_iot_id_table[idx] ;
}




/**
 * @brief 
 * 
 * @param in idx 
 * @return generator_attr_t ==NULL 查询出错,   !NULL 查询ok
 */
generator_attr_t*  generator_get_obj(uint8_t idx)   
{
    return  &generator_obj[idx];
}



/**
 * @brief generator_set_obj() 赋值节点数据
 * 
 * @param in idx
 * @param in p_attr
 * @return 0=失败，1=成功 
 */
uint8_t  generator_set_obj(uint8_t idx,generator_attr_t* p_attr )  
{
    if( idx>=BATTERY_NODE_NUM_MAX )
    {
        return 0;
    } 

    generator_obj[idx] = *p_attr;

 return 1 ;

}




/**
 * @brief 
 * 
 * @param attr_id 
 * @param attr_out 
 */
void generator_get_attr(uint8_t idx,uint16_t attr_id, IotModel* attr_out)
{
    attr_out->iot_id = attr_id;//传给服务器
    

    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:generator idx outof range\n"); 
       return ;
    }


    switch(attr_id)
    {
        //////---------RO--------------------------//////////////////////

            case 0x1388	://	5000	genVolt	发电机输出电压	RO	否	运行参数	uint32_t		0.1V
            {
                attr_out->value = generator_obj[idx].data.genVolt;
            } break;

            case 0x1389	://	5001	genCurr	发电机输出电流	RO	否	运行参数	uint32_t		0.1A
            {
                attr_out->value = generator_obj[idx].data.genCurr;
            } break;

            case 0x138A	://	5002	genPwr	发电机输出功率	RO	否	运行参数	uint32_t		W
            {
                attr_out->value = generator_obj[idx].data.genPwr;
            } break;

            case 0x138B	://	5003	genSpeed	转速	RO	否	运行参数	uint32_t		RPM
            {
                attr_out->value = generator_obj[idx].data.genSpeed;
            } break;

            case 0x138C	://	5004	genTorque	扭矩	RO	否	运行参数	uint32_t		Nm
            {
                attr_out->value = generator_obj[idx].data.genTorque;
            } break;

            case 0x138D	://	5005	runTime	运行时长	RO	否	运行参数	uint32_t		second
            {
                attr_out->value = generator_obj[idx].data.runTime;
            } break;

            case 0x138E	://	5006	fuelUsed	燃油油耗	RO	否	运行参数	uint32_t		L
            {
                attr_out->value = generator_obj[idx].data.fuelUsed;
            } break;

            case 0x139C	://	5020	oilTempe	机油温度	RO	否	运行参数	uint33_t		degreeC
            {
                attr_out->value = generator_obj[idx].data.oilTempe;
            } break;

            case 0x138F	://	5007	oilLevel	机油油位	RO	否	运行参数	uint32_t	0~100	%
            {
                attr_out->value = generator_obj[idx].data.oilLevel;
            } break;
                    
            case 0x1391	://	5009	alarm	告警	RO	否	运行参数	uint32_t		
           {
                attr_out->value = generator_obj[idx].data.alarm;
            } break;

            case 0x1392	://	5010	engiOpState	引擎操作状态	RO	否	运行参数	uint16_t		
            {
                attr_out->value = generator_obj[idx].data.engiOpState;
            } break;

            case 0x1393	://	5011	systemStatus	系统状态	RO	否	运行参数	uint16_t		
            {
                attr_out->value = generator_obj[idx].data.systemStatus;
            } break;
       //////---------RO--------------------------//////////////////////



    //////----配置参数-----R/W--------------------------//////////////////////

            //配置参数-:--R/W-----可读写-------

            case 0x1390	://	5008	thOilLevelLow	机油油位低阈值	R/W	否	配置参数	uint32_t	0~100	%
            {
                attr_out->value = generator_obj[idx].config.thOilLevelLow;
            } break;

            case 0x139D	://	5021	thOilTLow	机油温度低阈值	R/W	否	配置参数	uint32_t		degreeC
            {
                attr_out->value = generator_obj[idx].config.thOilTLow;
            } break;

            case 0x139E	://	5022	thOilTHi	机油温度高阈值	R/W	否	配置参数	uint32_t		degreeC
            {
                attr_out->value = generator_obj[idx].config.thOilTHi;
            } break;


        // 置参数----------只写不可读-------

            case 0x1394	://	5012	setMode	设置模式	WO	否	运行参数	uint16_t	0-4	
            {
                attr_out->value = generator_obj[idx].config.setMode;
            } break;

            case 0x1395	://	5013	manualStart	手动模式启停	WO	否	运行参数	uint16_t	0-1	
            {
                attr_out->value = generator_obj[idx].config.manualStart;
            } break;

            case 0x1396	://	5014	autoStartCfg	自启动设置	WO	否	运行参数	uint16_t	0-1	
            {
                attr_out->value = generator_obj[idx].config.autoStartCfg;
            } break;

            case 0x1397	://	5015	almMute	告警静音	WO	否	运行参数	uint16_t	1	
            {
                attr_out->value = generator_obj[idx].config.almMute;
            } break;

            case 0x1398	://	5016	almReset	告警复位	WO	否	运行参数	uint16_t	1	
            {
                attr_out->value = generator_obj[idx].config.almReset;
            } break;

            case 0x1399	://	5017	genSwOn	发电机合闸	WO	否	运行参数	uint16_t	1	
            {
                attr_out->value = generator_obj[idx].config.genSwOn;
            } break;

            case 0x139A	://	5018	mainsSwOn	市电合闸	WO	否	运行参数	uint16_t	1	
            {
                attr_out->value = generator_obj[idx].config.mainsSwOn;
            } break;

                                

        //////---------R/W--------------------------//////////////////////
        case 0x0600:
        {
            attr_out->value = generator_obj[idx].config.addr;
        }  break;

        case 0x0602:
        {
            attr_out->value = generator_obj[idx].config.channel;
        }  break;


        //////---------R/W--------------------------//////////////////////

// 0x0801	软件版本
// 0x0802	硬件版本
// 0x0803	产品型号
// 0x0804	生产信息
// 0x0805	厂家信息

        //////---------RO--------------------------//////////////////////
        // case 0x0800://0x0800	产品类型	RO	否	产品类型	uint16_t
        // {
        //     attr_out->value = CTK_PID;
        // }  break;

        case 0x0801:
        {
            attr_out->values.size = strlen(generator_obj[idx].info.soft_ver);
            strncpy((char*)attr_out->values.bytes,generator_obj[idx].info.soft_ver,32);
        }  break;
        case 0x0802:
        {
            attr_out->values.size = strlen(generator_obj[idx].info.hard_ver);
            strncpy((char*)attr_out->values.bytes,generator_obj[idx].info.hard_ver,32);
        }  break;

        case 0x0803:
        {
            attr_out->values.size = strlen(generator_obj[idx].info.product_model);
            strncpy((char*)attr_out->values.bytes,generator_obj[idx].info.product_model,32);
        }  break;

        case 0x0804:
        {
            attr_out->values.size = strlen(generator_obj[idx].info.production_info);
            strncpy((char*)attr_out->values.bytes,generator_obj[idx].info.production_info,32);
        }  break;

        case 0x0805:
        {
            attr_out->values.size = strlen(generator_obj[idx].info.manufacturer);
            strncpy((char*)attr_out->values.bytes,generator_obj[idx].info.manufacturer,32);
        }  break;
        //////---------RO--------------------------//////////////////////


       default: 
           break;

    }

}

/**
 * @brief 
 * 
 * @param attr_in 
 * @return uint8_t 
 */
uint8_t generator_set_attr(uint8_t idx,IotModel* attr)
{
uint8_t ret  = 0;

//dev_mod_info_t info;


    //printf_log(lv0,"set addr %04X, value = %d\n", attr->iot_id, attr->value);////printf_log

    logout("set addr %04X, value = %lu\n", attr->iot_id, attr->value);

    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:generator idx outof range\n"); 
       return 0;
    }

   //  memset((uint8_t*)&info,0,sizeof(dev_mod_info_t ) );

    // info.node_type = 1;
    // info.channel   = 2;
    // info.chan_addr = 1;

 //    iot_get_mod_info_with_index( idx ,&info);
//got info: chan_addr=1,channel=2,node_type=53254,indx=1
  // info.node_type = 1;

    switch( attr->iot_id )
    {

            case 0x1388	://	5000	genVolt	发电机输出电压	RO	否	运行参数	uint32_t		0.1V
            {
                generator_obj[idx].data.genVolt = attr->value ;
            } break;

            case 0x1389	://	5001	genCurr	发电机输出电流	RO	否	运行参数	uint32_t		0.1A
            {
                generator_obj[idx].data.genCurr = attr->value ;
            } break;

            case 0x138A	://	5002	genPwr	发电机输出功率	RO	否	运行参数	uint32_t		W
            {
                generator_obj[idx].data.genPwr = attr->value ;
            } break;

            case 0x138B	://	5003	genSpeed	转速	RO	否	运行参数	uint32_t		RPM
            {
                generator_obj[idx].data.genSpeed = attr->value ;
            } break;

            case 0x138C	://	5004	genTorque	扭矩	RO	否	运行参数	uint32_t		Nm
            {
                generator_obj[idx].data.genTorque = attr->value ;
            } break;

            case 0x138D	://	5005	runTime	运行时长	RO	否	运行参数	uint32_t		second
            {
                generator_obj[idx].data.runTime = attr->value ;
            } break;

            case 0x138E	://	5006	fuelUsed	燃油油耗	RO	否	运行参数	uint32_t		L
            {
                generator_obj[idx].data.fuelUsed = attr->value ;
            } break;

            case 0x139C	://	5020	oilTempe	机油温度	RO	否	运行参数	uint33_t		degreeC
            {
                generator_obj[idx].data.oilTempe = attr->value ;
            } break;

            case 0x138F	://	5007	oilLevel	机油油位	RO	否	运行参数	uint32_t	0~100	%
            {
                generator_obj[idx].data.oilLevel = attr->value ;
            } break;
                    
            case 0x1391	://	5009	alarm	告警	RO	否	运行参数	uint32_t		
           {
                generator_obj[idx].data.alarm = attr->value ;
            } break;

            case 0x1392	://	5010	engiOpState	引擎操作状态	RO	否	运行参数	uint16_t		
            {
                generator_obj[idx].data.engiOpState = attr->value ;
            } break;

            case 0x1393	://	5011	systemStatus	系统状态	RO	否	运行参数	uint16_t		
            {
                generator_obj[idx].data.systemStatus = attr->value ;
            } break;
       //////---------RO--------------------------//////////////////////



    //////----配置参数-----R/W--------------------------//////////////////////

            //配置参数-:--R/W-----可读写-------

            case 0x1390	://	5008	thOilLevelLow	机油油位低阈值	R/W	否	配置参数	uint32_t	0~100	%
            {
                generator_obj[idx].config.thOilLevelLow = attr->value ;
            } break;

            case 0x139D	://	5021	thOilTLow	机油温度低阈值	R/W	否	配置参数	uint32_t		degreeC
            {
                generator_obj[idx].config.thOilTLow = attr->value ;
            } break;

            case 0x139E	://	5022	thOilTHi	机油温度高阈值	R/W	否	配置参数	uint32_t		degreeC
            {
                generator_obj[idx].config.thOilTHi = attr->value ;
            } break;


        // 置参数----------只写不可读-------

            case 0x1394	://	5012	setMode	设置模式	WO	否	运行参数	uint16_t	0-4	
            {
                generator_obj[idx].config.setMode = attr->value ;
            } break;

            case 0x1395	://	5013	manualStart	手动模式启停	WO	否	运行参数	uint16_t	0-1	
            {
                generator_obj[idx].config.manualStart = attr->value ;
            } break;

            case 0x1396	://	5014	autoStartCfg	自启动设置	WO	否	运行参数	uint16_t	0-1	
            {
                generator_obj[idx].config.autoStartCfg = attr->value ;
            } break;

            case 0x1397	://	5015	almMute	告警静音	WO	否	运行参数	uint16_t	1	
            {
                generator_obj[idx].config.almMute = attr->value ;
            } break;

            case 0x1398	://	5016	almReset	告警复位	WO	否	运行参数	uint16_t	1	
            {
                generator_obj[idx].config.almReset = attr->value ;
            } break;

            case 0x1399	://	5017	genSwOn	发电机合闸	WO	否	运行参数	uint16_t	1	
            {
                generator_obj[idx].config.genSwOn = attr->value ;
            } break;

            case 0x139A	://	5018	mainsSwOn	市电合闸	WO	否	运行参数	uint16_t	1	
            {
                generator_obj[idx].config.mainsSwOn = attr->value ;
            } break;

                                

        //////---------R/W--------------------------//////////////////////
        case 0x0600:
        {
            generator_obj[idx].config.addr = attr->value ;
        }  break;

        case 0x0602:
        {
            generator_obj[idx].config.channel = attr->value ;
        }  break;

        //////---------R/W--------------------------//////////////////////

       default: 
           break;

    }

 return ret;

}



#define  generator_scale_step           (25U)

void generator_test_tick_min(uint8_t idx)
{
static uint32_t cnt = 0;
  IotModel attr;
    memset(&attr, 0,  sizeof(IotModel) );

   LOG_NAME();
/////------测试数据-------------------------
    // .data.level_mm = 50728, //0.01mm
    // .data.temper   = 37,    //温度  1℃ 


// 0x0500	烟雾报警信息
    attr.iot_id =0x0500;
    attr.value =0x0000;
    generator_set_attr(idx, &attr); 


// 0x0501	烟雾
    attr.iot_id =0x0501;

   if(cnt < generator_max_scale_0_01mm/generator_scale_step)
   {
       attr.value = generator_max_scale_0_01mm - generator_scale_step*cnt;
   }else{
       attr.value = 0;
   }


    generator_set_attr(idx, &attr); 


// 0x0030	温度
    attr.iot_id =0x0030;
    attr.value = 20 + (cnt&0x0F);
    generator_set_attr(idx, &attr); 
 
    cnt++;

}




//void generator_update_tick_min(uint8_t idx,uint8_t pattr_size,IotModel* pattr )
////刷新节点运行数据
void generator_update_tick_min(uint8_t idx,int8_t temper ,uint32_t generator )
{
  IotModel attr;
  memset(&attr, 0,  sizeof(IotModel) );

   LOG_NAME();



    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:generator idx outof range\n"); 
       return ;
    }




// 0x0501	烟雾
    attr.iot_id =0x0501;
    attr.value = generator;
    generator_set_attr(idx, &attr); 


// 0x0030	温度
    attr.iot_id =0x0030;
    attr.value  = temper;////负温度的时候有问题----还需要进一步处理
    generator_set_attr(idx, &attr); 
 
}







////刷新节点运行数据
void generator_obj_update(uint8_t idx,generator_attr_t* pliq_in  )
{
  IotModel attr;
  memset(&attr, 0,  sizeof(IotModel) );

   LOG_NAME();

    if( idx > BATTERY_NODE_NUM_MAX )
    {
       logout("error:generator idx outof range\n"); 
       return ;
    }


    if( NULL==pliq_in )
    {
       logout("error:pliq_in==NULL\n"); 
       return ;
    }



//#if 0
generator_attr_t*  pattr=generator_get_obj( idx) ; 

 ////-----保存节点数据到物模型------
      *pattr = *pliq_in;

 //-----同步节点数据到 白名单--------
   iot_set_device_online_state_with_index(idx,  pliq_in->flags.bit.online );   ////同步节点在线标志到 白名单-----

 //-----还有其它数据需要同步到 白名单----通道编号--通道地址???----





}






























